export const UniversalRouterABI = [
  {
    type: 'constructor',
    inputs: [
      {
        name: 'params',
        type: 'tuple',
        internalType: 'struct RouterParameters',
        components: [
          { name: 'permit2', type: 'address', internalType: 'address' },
          { name: 'weth9', type: 'address', internalType: 'address' },
          { name: 'v2Factory', type: 'address', internalType: 'address' },
          { name: 'v3Factory', type: 'address', internalType: 'address' },
          { name: 'v3Deployer', type: 'address', internalType: 'address' },
          { name: 'v2InitCodeHash', type: 'bytes32', internalType: 'bytes32' },
          { name: 'v3InitCodeHash', type: 'bytes32', internalType: 'bytes32' },
          { name: 'stableFactory', type: 'address', internalType: 'address' },
          { name: 'stableInfo', type: 'address', internalType: 'address' },
          { name: 'infiVault', type: 'address', internalType: 'address' },
          { name: 'infiClPoolManager', type: 'address', internalType: 'address' },
          { name: 'infiBinPoolManager', type: 'address', internalType: 'address' },
          { name: 'v3NFTPositionManager', type: 'address', internalType: 'address' },
          { name: 'infiClPositionManager', type: 'address', internalType: 'address' },
          { name: 'infiBinPositionManager', type: 'address', internalType: 'address' },
        ],
      },
    ],
    stateMutability: 'nonpayable',
  },
  { type: 'receive', stateMutability: 'payable' },
  {
    type: 'function',
    name: 'INFI_BIN_POSITION_MANAGER',
    inputs: [],
    outputs: [{ name: '', type: 'address', internalType: 'contract IPositionManager' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    name: 'INFI_CL_POSITION_MANAGER',
    inputs: [],
    outputs: [{ name: '', type: 'address', internalType: 'contract IPositionManager' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    name: 'V3_POSITION_MANAGER',
    inputs: [],
    outputs: [{ name: '', type: 'address', internalType: 'contract IV3NonfungiblePositionManager' }],
    stateMutability: 'view',
  },
  { type: 'function', name: 'acceptOwnership', inputs: [], outputs: [], stateMutability: 'nonpayable' },
  {
    type: 'function',
    name: 'binPoolManager',
    inputs: [],
    outputs: [{ name: '', type: 'address', internalType: 'contract IBinPoolManager' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    name: 'clPoolManager',
    inputs: [],
    outputs: [{ name: '', type: 'address', internalType: 'contract ICLPoolManager' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    name: 'execute',
    inputs: [
      { name: 'commands', type: 'bytes', internalType: 'bytes' },
      { name: 'inputs', type: 'bytes[]', internalType: 'bytes[]' },
    ],
    outputs: [],
    stateMutability: 'payable',
  },
  {
    type: 'function',
    name: 'execute',
    inputs: [
      { name: 'commands', type: 'bytes', internalType: 'bytes' },
      { name: 'inputs', type: 'bytes[]', internalType: 'bytes[]' },
      { name: 'deadline', type: 'uint256', internalType: 'uint256' },
    ],
    outputs: [],
    stateMutability: 'payable',
  },
  {
    type: 'function',
    name: 'lockAcquired',
    inputs: [{ name: 'data', type: 'bytes', internalType: 'bytes' }],
    outputs: [{ name: '', type: 'bytes', internalType: 'bytes' }],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    name: 'msgSender',
    inputs: [],
    outputs: [{ name: '', type: 'address', internalType: 'address' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    name: 'owner',
    inputs: [],
    outputs: [{ name: '', type: 'address', internalType: 'address' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    name: 'pancakeV3SwapCallback',
    inputs: [
      { name: 'amount0Delta', type: 'int256', internalType: 'int256' },
      { name: 'amount1Delta', type: 'int256', internalType: 'int256' },
      { name: 'data', type: 'bytes', internalType: 'bytes' },
    ],
    outputs: [],
    stateMutability: 'nonpayable',
  },
  { type: 'function', name: 'pause', inputs: [], outputs: [], stateMutability: 'nonpayable' },
  {
    type: 'function',
    name: 'paused',
    inputs: [],
    outputs: [{ name: '', type: 'bool', internalType: 'bool' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    name: 'pendingOwner',
    inputs: [],
    outputs: [{ name: '', type: 'address', internalType: 'address' }],
    stateMutability: 'view',
  },
  { type: 'function', name: 'renounceOwnership', inputs: [], outputs: [], stateMutability: 'nonpayable' },
  {
    type: 'function',
    name: 'setStableSwap',
    inputs: [
      { name: '_factory', type: 'address', internalType: 'address' },
      { name: '_info', type: 'address', internalType: 'address' },
    ],
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    name: 'stableSwapFactory',
    inputs: [],
    outputs: [{ name: '', type: 'address', internalType: 'address' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    name: 'stableSwapInfo',
    inputs: [],
    outputs: [{ name: '', type: 'address', internalType: 'address' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    name: 'transferOwnership',
    inputs: [{ name: 'newOwner', type: 'address', internalType: 'address' }],
    outputs: [],
    stateMutability: 'nonpayable',
  },
  { type: 'function', name: 'unpause', inputs: [], outputs: [], stateMutability: 'nonpayable' },
  {
    type: 'function',
    name: 'vault',
    inputs: [],
    outputs: [{ name: '', type: 'address', internalType: 'contract IVault' }],
    stateMutability: 'view',
  },
  {
    type: 'event',
    name: 'OwnershipTransferStarted',
    inputs: [
      { name: 'previousOwner', type: 'address', indexed: true, internalType: 'address' },
      { name: 'newOwner', type: 'address', indexed: true, internalType: 'address' },
    ],
    anonymous: false,
  },
  {
    type: 'event',
    name: 'OwnershipTransferred',
    inputs: [
      { name: 'previousOwner', type: 'address', indexed: true, internalType: 'address' },
      { name: 'newOwner', type: 'address', indexed: true, internalType: 'address' },
    ],
    anonymous: false,
  },
  {
    type: 'event',
    name: 'Paused',
    inputs: [{ name: 'account', type: 'address', indexed: false, internalType: 'address' }],
    anonymous: false,
  },
  {
    type: 'event',
    name: 'SetStableSwap',
    inputs: [
      { name: 'factory', type: 'address', indexed: true, internalType: 'address' },
      { name: 'info', type: 'address', indexed: true, internalType: 'address' },
    ],
    anonymous: false,
  },
  {
    type: 'event',
    name: 'Unpaused',
    inputs: [{ name: 'account', type: 'address', indexed: false, internalType: 'address' }],
    anonymous: false,
  },
  { type: 'error', name: 'BalanceTooLow', inputs: [] },
  { type: 'error', name: 'ContractLocked', inputs: [] },
  {
    type: 'error',
    name: 'DeltaNotNegative',
    inputs: [{ name: 'currency', type: 'address', internalType: 'Currency' }],
  },
  {
    type: 'error',
    name: 'DeltaNotPositive',
    inputs: [{ name: 'currency', type: 'address', internalType: 'Currency' }],
  },
  { type: 'error', name: 'ETHNotAccepted', inputs: [] },
  { type: 'error', name: 'EnforcedPause', inputs: [] },
  {
    type: 'error',
    name: 'ExecutionFailed',
    inputs: [
      { name: 'commandIndex', type: 'uint256', internalType: 'uint256' },
      { name: 'message', type: 'bytes', internalType: 'bytes' },
    ],
  },
  { type: 'error', name: 'ExpectedPause', inputs: [] },
  { type: 'error', name: 'FromAddressIsNotOwner', inputs: [] },
  { type: 'error', name: 'InputLengthMismatch', inputs: [] },
  { type: 'error', name: 'InsufficientBalance', inputs: [] },
  { type: 'error', name: 'InsufficientETH', inputs: [] },
  { type: 'error', name: 'InsufficientToken', inputs: [] },
  { type: 'error', name: 'InvalidAction', inputs: [{ name: 'action', type: 'bytes4', internalType: 'bytes4' }] },
  { type: 'error', name: 'InvalidBips', inputs: [] },
  {
    type: 'error',
    name: 'InvalidCommandType',
    inputs: [{ name: 'commandType', type: 'uint256', internalType: 'uint256' }],
  },
  { type: 'error', name: 'InvalidEthSender', inputs: [] },
  { type: 'error', name: 'InvalidPath', inputs: [] },
  { type: 'error', name: 'InvalidPoolAddress', inputs: [] },
  { type: 'error', name: 'InvalidPoolLength', inputs: [] },
  { type: 'error', name: 'InvalidReserves', inputs: [] },
  { type: 'error', name: 'LengthMismatch', inputs: [] },
  {
    type: 'error',
    name: 'NotAuthorizedForToken',
    inputs: [{ name: 'tokenId', type: 'uint256', internalType: 'uint256' }],
  },
  { type: 'error', name: 'NotVault', inputs: [] },
  { type: 'error', name: 'OnlyAddLiqudityAllowed', inputs: [] },
  { type: 'error', name: 'OnlyMintAllowed', inputs: [] },
  { type: 'error', name: 'OwnableInvalidOwner', inputs: [{ name: 'owner', type: 'address', internalType: 'address' }] },
  {
    type: 'error',
    name: 'OwnableUnauthorizedAccount',
    inputs: [{ name: 'account', type: 'address', internalType: 'address' }],
  },
  { type: 'error', name: 'SafeCastOverflow', inputs: [] },
  { type: 'error', name: 'SliceOutOfBounds', inputs: [] },
  { type: 'error', name: 'StableInvalidPath', inputs: [] },
  { type: 'error', name: 'StableTooLittleReceived', inputs: [] },
  { type: 'error', name: 'StableTooMuchRequested', inputs: [] },
  {
    type: 'error',
    name: 'TooLittleReceived',
    inputs: [
      { name: 'minAmountOutReceived', type: 'uint256', internalType: 'uint256' },
      { name: 'amountReceived', type: 'uint256', internalType: 'uint256' },
    ],
  },
  {
    type: 'error',
    name: 'TooMuchRequested',
    inputs: [
      { name: 'maxAmountInRequested', type: 'uint256', internalType: 'uint256' },
      { name: 'amountRequested', type: 'uint256', internalType: 'uint256' },
    ],
  },
  { type: 'error', name: 'TransactionDeadlinePassed', inputs: [] },
  { type: 'error', name: 'UnsafeCast', inputs: [] },
  { type: 'error', name: 'UnsupportedAction', inputs: [{ name: 'action', type: 'uint256', internalType: 'uint256' }] },
  { type: 'error', name: 'V2InvalidPath', inputs: [] },
  { type: 'error', name: 'V2TooLittleReceived', inputs: [] },
  { type: 'error', name: 'V2TooMuchRequested', inputs: [] },
  { type: 'error', name: 'V3InvalidAmountOut', inputs: [] },
  { type: 'error', name: 'V3InvalidCaller', inputs: [] },
  { type: 'error', name: 'V3InvalidSwap', inputs: [] },
  { type: 'error', name: 'V3TooLittleReceived', inputs: [] },
  { type: 'error', name: 'V3TooMuchRequested', inputs: [] },
] as const
